<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    /* 为什么需要数据类型：
        在计算机中，不同的数据类型所需占用的存储空间是不同的，为了便于把数据分成所需内存
        不同的大小数据，充分利用存储空间，于是定义了数据类型
        简单来说，数据类型就是数据的类别型号，比如：姓名‘张三’;年龄‘18’数据类型是不同的 */
    /* 变量的数据类型：
        变量是用来存储值的所在处，他们有名字和数据类型，变量的数据类型决定了
        代表这些值的位存储到计算机内存中
        js是一种弱类型语言或者说动态类型语言，在声明变量中，不需要指定变量类型
        在程序运行过程中，类型会被自动确定，
        意味着js变量的内存空间中可以存放任意类型的数据 */
    /* 基本数据类型：
        undefined（未被定义），null（空），
        string（字符串），number（数字），boolean（布尔） */
    var num;//未被定义
    num = null;//空
    num = 5;//数字类型
    num = "sam";//字符串类型
    num = true;//布尔类型
    /* 然而在其他强类型编程语言中，变量的空间所能存放的数据类型是事先规定好的
    例如java
    int num=9;使用int关键字声明的变量空间中只能存放整数 */

    // 布尔类型表示一个逻辑值，只有true false两个值

    // number类型
    /* 数字类型表示数值，整数，浮点数，还有一些符号的值
    +Infinity（正无穷大），-Infinity（负无穷大） NaN非数值 */
    var sec = 0b01011010; //0b二进制表示的90
    // var oct =0132;//0开头八进制表示的90
    var hex = 0x5A;//0x十六进制表示的90
    var f1 = 3.14E6//科学计数法：E几就是10的几次方
    var f2 = 314E-2//-几就是10的负几次方
    console.log(hex);

    /*字符串类型，用于表示文本数据，使用单引号或双引号括起来 
    声明字符串时，必须使用单引号或双引号，
    只要被引号引起来的内容就是字符串（string）类型 
    */
    // 定义空字符串变量
    var str = ''

    // 字符串中的转义字符
    // 反斜杠\ 可以在编译时进行换行
    var name1 = '张\
    三'
    // \n换行 输出的是换行
    var name2 = '张\n三'
    // \t :tab(四个空格)
    var name3 = '张\t三'

    /* undefined类型只有一个值undefined
    任何一个声明没有默认值的变量都会被隐式赋值为undefined */

    /* null类型：只有一个值null
    null表示缺少的，指示变量未指向任何对象，把null作为尚未创建的对象 
    也许更好理解，这也是使用typeof操作符检测null值时返回object的原因*/

    // typeof(a)类型检测，小括号里面是需要检测类型的标识符
    var a = 5;
    console.log(typeof (a));
    var mtphone = null;
    console.log(typeof (mtphone));

    /* 注意：undefined和null的区别：
    undefined表示变量没有设置任何值，但是内存已经开辟
    null表示变量不存在或者无效，并没有开辟空间 */

    // 复杂数据类型（引用数据类型）
    // 在计算机科学中，对象是指内存中可以被标识符引用的的一块区域
    /* 在js中，引用类型的数据是指各种对象，例如object，array，data等
    他们在内存中的存储方式和原始数据不同
    以object为例，object对象是一组属性的集合，属性包含属性名、属性值
    例如： */
    var person = {
        name: "张三",
        age: 18,
        sex: true
    };
    console.log(person);
</script>

</html>